home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / lib / rcscripts / addons / udev-start.sh next >
Text File  |  2006-05-02  |  4KB  |  177 lines

  1. # Copyright 1999-2005 Gentoo Foundation
  2. # Distributed under the terms of the GNU General Public License v2
  3.  
  4. udev_version() {
  5.     local version=0
  6.  
  7.     if [[ -x /sbin/udev ]] ; then
  8.         version=$(/sbin/udev -V)
  9.         # We need it without a leading '0', else bash do the wrong thing
  10.         version=${version##0}
  11.         # Older udev's will print nothing
  12.         [[ -z ${version} ]] && version=0
  13.     fi
  14.  
  15.     echo "${version}"
  16. }
  17.  
  18. # This works for 2.6.15 kernels or greater
  19. trigger_events() {
  20.     list=""
  21.     # if you want real coldplug (with all modules being loaded for all
  22.     # devices in the system), uncomment out the next line.
  23.     #list="$list $(echo /sys/bus/*/devices/*/uevent)"
  24.     list="$list $(echo /sys/class/*/*/uevent)"
  25.     list="$list $(echo /sys/block/*/uevent /sys/block/*/*/uevent)"
  26.     for i in $list; do
  27.         case "$i" in
  28.             */device/uevent)
  29.                 # skip followed device symlinks
  30.                 continue
  31.                 ;;
  32.             */class/mem/*|*/class/tty/*)
  33.                 first="$first $i"
  34.                 ;;
  35.             */block/md*)
  36.                 last="$last $i"
  37.                 ;;
  38.             */*)
  39.                 default="$default $i"
  40.                 ;;
  41.         esac
  42.     done
  43.  
  44.     # trigger the sorted events
  45.     for i in $first $default $last; do
  46.         echo "add" > "$i"
  47.     done
  48. }
  49.  
  50. populate_udev() {
  51.     # populate /dev with devices already found by the kernel
  52.     if [ "$(get_KV)" -gt "$(KV_to_int '2.6.14')" ] ; then
  53.         ebegin "Populating /dev with existing devices through uevents"
  54.         trigger_events
  55.         eend 0
  56.     else
  57.         ebegin "Populating /dev with existing devices with udevstart"
  58.         /sbin/udevstart
  59.         eend 0
  60.     fi
  61.  
  62.     # loop until everything is finished
  63.     # there's gotta be a better way...
  64.     ebegin "Letting udev process events"
  65.     loop=0
  66.     while test -d /dev/.udev/queue; do
  67.         sleep 0.1;
  68.         test "$loop" -gt 300 && break
  69.         loop=$(($loop + 1))
  70.     done
  71.     #einfo "loop = $loop"
  72.     eend 0
  73.  
  74.     return 0
  75. }
  76.  
  77. seed_dev() {
  78.     # Seed /dev with some things that we know we need
  79.     ebegin "Seeding /dev with needed nodes"
  80.  
  81.     # copy over any persistant things
  82.     cp --preserve=all --recursive --update /lib/udev/devices/* /dev
  83.  
  84.     # Not provided by sysfs but needed
  85.     ln -snf /proc/self/fd /dev/fd
  86.     ln -snf fd/0 /dev/stdin
  87.     ln -snf fd/1 /dev/stdout
  88.     ln -snf fd/2 /dev/stderr
  89.     [[ -e /proc/kcore ]] && ln -snf /proc/kcore /dev/core
  90.  
  91.     # Create problematic directories
  92.     mkdir -p /dev/{pts,shm}
  93.     eend 0
  94. }
  95.  
  96.  
  97. main() {
  98.     # Setup temporary storage for /dev
  99.     ebegin "Mounting /dev for udev"
  100.     if [[ ${RC_USE_FSTAB} == "yes" ]] ; then
  101.         mntcmd=$(get_mount_fstab /dev)
  102.     else
  103.         unset mntcmd
  104.     fi
  105.     if [[ -n ${mntcmd} ]] ; then
  106.         try mount -n ${mntcmd}
  107.     else
  108.         if egrep -qs tmpfs /proc/filesystems ; then
  109.             mntcmd="tmpfs"
  110.         else
  111.             mntcmd="ramfs"
  112.         fi
  113.         # many video drivers require exec access in /dev #92921
  114.         try mount -n -t ${mntcmd} udev /dev -o exec,nosuid,mode=0755
  115.     fi
  116.     eend $?
  117.  
  118.     # Create a file so that our rc system knows it's still in sysinit.
  119.     # Existance means init scripts will not directly run.
  120.     # rc will remove the file when done with sysinit.
  121.     touch /dev/.rcsysinit
  122.  
  123.     # Selinux lovin; /selinux should be mounted by selinux-patched init
  124.     if [[ -x /sbin/restorecon && -c /selinux/null ]] ; then
  125.         restorecon /dev &> /selinux/null
  126.     fi
  127.  
  128.     # Actually get udev rolling
  129.     if [[ ${RC_DEVICE_TARBALL} == "yes" && \
  130.           -s /lib/udev-state/devices.tar.bz2 ]] ; then
  131.         ebegin "Populating /dev with saved device nodes"
  132.         try tar -jxpf /lib/udev-state/devices.tar.bz2 -C /dev
  133.         eend $?
  134.     fi
  135.  
  136.     seed_dev
  137.  
  138.     # Setup hotplugging (if possible)
  139.     ebegin "Setting up proper hotplug agent"
  140.     if [[ -e /proc/sys/kernel/hotplug ]] ; then
  141.         if [ "$(get_KV)" -gt "$(KV_to_int '2.6.14')" ] ; then
  142.             einfo "  Using netlink for hotplug events..."
  143.             echo "" > /proc/sys/kernel/hotplug
  144.         elif [[ $(udev_version) -ge "48" ]] ; then
  145.             einfo "  Setting /sbin/udevsend as hotplug agent ..."
  146.             echo "/sbin/udevsend" > /proc/sys/kernel/hotplug
  147.         elif [[ -x /sbin/hotplug ]] ; then
  148.             einfo "  Using /sbin/hotplug as hotplug agent ..."
  149.         else
  150.             einfo "  Setting /sbin/udev as hotplug agent ..."
  151.             echo "/sbin/udev" > /proc/sys/kernel/hotplug
  152.         fi
  153.     fi
  154.     eend 0
  155.  
  156.     ebegin "Starting udevd"
  157.     /sbin/udevd --daemon
  158.     eend $?
  159.  
  160.     populate_udev
  161.  
  162.     # Create nodes that udev can't
  163.     ebegin "Finializing udev configuration"
  164.     [[ -x /sbin/dmsetup ]] && /sbin/dmsetup mknodes &>/dev/null
  165.     [[ -x /sbin/lvm ]] && \
  166.         /sbin/lvm vgscan -P --mknodes --ignorelockingfailure &>/dev/null
  167.     # Running evms_activate on a LiveCD causes lots of headaches
  168.     [[ -z ${CDBOOT} ]] && [[ -x /sbin/evms_activate ]] && \
  169.         /sbin/evms_activate -q &>/dev/null
  170.     eend 0
  171. }
  172.  
  173. main
  174.  
  175.  
  176. # vim:ts=4
  177.